import useFileRenameExcelStore from '@renderer/store/Excel/FileRenameExcelStore'

// 匹配异常字符
const errCharRegex = /[\\/:*?"<>|;]/gi

function addErrMsg(msgArr: string[], index: number) {
  msgArr.push(`第 ${index} 行格式有误：可能含有 \\ / | " * : ? < > ;`)
}

function addEmptyMsg(msgArr: string[], index: number) {
  msgArr.push(`第 ${index} 行格式有误：空白单元格`)
}

// 校验替换字符串
function verifyReplaceStr(msgArr: string[], replaceStr: string, index: number) {
  // 是否为空
  if (!replaceStr) {
    addEmptyMsg(msgArr, index)
  } else {
    // 是否有违规字符
    if (errCharRegex.test(replaceStr)) {
      addErrMsg(msgArr, index)
    }
  }
}

const fileRenameExcelStore = useFileRenameExcelStore()

// 解析导入的 Excel 数据
export default function useParseExcelDataTransfer(tableData: ITableDataItem[]) {
  const parseExcelDataTransfer = (): IExcelErrMsg | undefined => {
    const excelInitialData = fileRenameExcelStore.getExcelInitialData()

    // 没有文件名称不进行解析
    if (!excelInitialData.excelFileName) {
      return
    }

    const { form } = fileRenameExcelStore

    // Excel 文件内容
    const excelFileContent =
      fileRenameExcelStore.getExcelInitialData().excelFileContent

    const result: IExcelErrMsg = {
      title: '表格内容为空，请检查表格是否有误'
    }

    // 判空
    if (excelFileContent.length === 0) {
      return result
    }

    result.msgArr = []

    // 按顺序重命名
    if (form.importRenameMethod === '0') {
      for (let i = 0; i < tableData.length; i++) {
        const item = tableData[i]

        // 如果索引超出 Excel 数组大小范围,则退出读取
        if (i > excelFileContent.length - 1) {
          break
        }

        // Excel 一行的元素
        const lineData = excelFileContent[i]
        if (lineData) {
          // 取第一个元素
          const firstCell = lineData[0]
          item.newest.name = firstCell

          // 校验替换字符串
          verifyReplaceStr(result.msgArr, firstCell, i + 1)
        }
      }
    } else if (form.importRenameMethod === '1') {
      for (let i = 0; i < excelFileContent.length; i++) {
        // Excel 一行的元素
        const lineData = excelFileContent[i]
        // 当前行没有数据
        if (!lineData) {
          continue
        }

        // 匹配字符
        const matchStr = lineData[0]
        if (!matchStr) {
          continue
        }

        const filterDataList = tableData.filter(
          (item) => item.original.name === matchStr
        )

        // 未匹配到任何元素
        if (filterDataList.length === 0) {
          continue
        }

        const replaceStr = lineData[1]

        // 状态置为匹配成功并重新赋值
        filterDataList.forEach((item) => {
          item.state = '20'
          item.newest.name = replaceStr
        })

        // 校验替换字符串
        verifyReplaceStr(result.msgArr, replaceStr, i + 1)
      }
    }

    // 按顺序重命名
    if (form.importRenameMethod === '0') {
      // 有异常信息则返回
      if (result.msgArr.length > 0) {
        result.title = '导入完成，请检查表格内容以下问题'
        return result
      }

      return
    } else {
      // 按匹配重命名
      // 是否有未匹配成功的文件
      const filterTableData: ITableDataItem[] = []
      tableData.forEach((item) => {
        if (item.state !== '20') {
          // 匹配失败
          item.state = '30'
          filterTableData.push(item)
        }
      })

      if (filterTableData.length > 0) {
        if (result.msgArr.length > 0) {
          result.title = `${filterTableData.length} 个文件名匹配失败！\n且表格内容存在以下问题`
        } else {
          result.title = `匹配完成，${filterTableData.length} 个文件名匹配失败！`
        }
        return result
      }

      return
    }
  }

  return {
    parseExcelDataTransfer
  }
}
